<?php
{
    /**
     * Class Controller.class Controller基类
     */
    abstract class Controller
    {
        /**
         * @var Smarty Smarty对象
         */
        private $smarty;

        /**
         * Controller constructor.构造函数
         */
        function __construct()
        {
            $this -> logHelper = new LogHelper();
            $this -> InitSmarty();
        }

        #region 初始化Smarty信息 InitSmarty
        /**
         * 初始化Smarty信息
         */
        private function InitSmarty()
        {
            $this -> smarty = new Smarty();

            //是否使用缓存，开发阶段不建议使用缓存，所以~false
            $this -> smarty -> caching = false;

            //模板目录，就是保存模板的位置，写对了smarty才能找到
            $className = get_called_class();
            $className = str_replace("Controller", "", $className);

            $router = $GLOBALS["globleRouter"]; // 路由信息
            $area = APP_PATH;
            if ($router["area"] != "")
            {
                $area = APP_PATH . "Areas/" . $router["area"] . "/";
            }

            $this -> smarty -> template_dir = $area . 'Views/' . $className;

            //编译目录，保存编译后的tpl的地方
            $this -> smarty -> compile_dir = $area . 'Views/template_c';

            //外部配置文件目录，这个配置文件我个人理解是放一些Smarty相关的常量的，之后会说。
            //$this -> smarty -> config_dir = './configs';

            //缓存文件目录我们把缓存关了，所以可以无视。
            $this -> smarty -> cache_dir = $area . 'Views/cache/';

            /*
            $this -> smarty -> left_delimiter = "<?";
            $this -> smarty -> right_delimiter = "?>";
            */
        }
        #endregion

        #region 显示视图 View
        /**
         * 显示视图
         * @param string $template 模板名称
         * @throws SmartyException
         */
        public function View($template = '')
        {
            if ($template == '')
            {
                $debugs = debug_backtrace();
                $action = $debugs[1]["function"];
                $template = $action . ".tpl";
            }
            $this -> smarty -> display($template);
        }
        #endregion

        #region 绑定值到页面 Assign
        /**
         * 绑定值到页面
         * @param string $key 绑定键
         * @param object $value 绑定值
         */
        public function Assign($key = '', $value = null)
        {
            $this -> smarty -> assign($key, $value);
        }
        #endregion

        #region 对指定的数据进行Json_encode操作并echo输出 Json
        /**
         * 对指定的数据进行Json_encode操作并echo输出
         * @param object $obj 需要JSON的数据
         * @param bool $isExit 输出后是否进行exit操作
         */
        public function Json($obj,$isExit = true)
        {
            echo json_encode($obj, JSON_UNESCAPED_UNICODE);
            if ($isExit)
            {
                exit;
            }
        }
        #endregion

        #region 跳转页面 Redirect
        /**
         * 跳转页面
         * @param string $controller 控制器
         * @param string $action 活动
         * @param string $queryString 查询数据
         */
        public function Redirect($url)
        {
            header("Location: " . $url);
        }
        #endregion



    }
}